#ifndef __DICTPRODUCER_H__
#define __DICTPRODUCER_H__

#include "MySQLConnector.h"
#include "Logger.h"
#include "SplitToolCppJieba.h"
#include "Configuration.h"
#include <fstream>
#include <iostream>
#include <map>
#include <set>

using std::cout;
using std::endl;
using std::ifstream;
using std::ofstream;
using std::map;
using std::set;

class DictProducer
{
public:
    DictProducer(const string &dir);
    DictProducer(const string &dir, SplitTool *splitTool);//构造函数，转为中文处理
    void buildEnDict();//创建英文字典
    void buildCnDict();//创建中文字典
    void storeEnDict(const string & filepath);//将英文词典写入文件
    void storeCnDict(const string & filepath);//将中文词典写入文件
    //void showFile() const;//查看文件路径，作为测试用
    //void showDict() const;//查看词典，作为测试用
    void buildEnIndex();//英文索引的建立
    void buildCnIndex();//中文索引的建立
    void storeCnIndex(const string &filepath);
    void storeEnIndex(const string &filepath);

    size_t getByteNum_UTF8(const char byte);
    string dealWord(string &oldWord,unordered_set<string>&EnWordStop);
    void insertWord(string &newWord);

    void createIndexTable(const string &tablename);
    void createDictTable(const string &tablename);

private:
    vector<string> _files;//语料库文件的绝对路径集合
    map<string, int> _EnDict;//英文词典
    map<string, int> _CnDict;//中文词典
    SplitTool *_splitTool;//分词工具
    map<string, set<int>> _EnIndex;//英文词典索引
    map<string, set<int>> _CnIndex;//中文词典索引

};

#endif
